package com.rabbiter.oes.controller;

import com.rabbiter.oes.entity.*;
import com.rabbiter.oes.serviceimpl.FillQuestionServiceImpl;
import com.rabbiter.oes.serviceimpl.JudgeQuestionServiceImpl;
import com.rabbiter.oes.serviceimpl.MultiQuestionServiceImpl;
import com.rabbiter.oes.serviceimpl.PaperServiceImpl;
import com.rabbiter.oes.util.ApiResultHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


@RestController
public class PaperController {

    // 注入试卷服务及各类题型服务
    @Autowired
    private PaperServiceImpl paperService;
    @Autowired
    private JudgeQuestionServiceImpl judgeQuestionService;
    @Autowired
    private MultiQuestionServiceImpl multiQuestionService;
    @Autowired
    private FillQuestionServiceImpl fillQuestionService;

    /**
     * 获取所有试卷信息
     * @return 包含试卷列表的ApiResult响应对象（状态码200+成功消息+数据）
     */
    @GetMapping("/papers")
    public ApiResult<PaperManage> findAll() {
       ApiResult res =  ApiResultHandler.buildApiResult(200,"请求成功",paperService.findAll());
       return  res;
    }

    /**
     * 根据试卷ID获取试题集合
     * @param paperId 试卷唯一标识符
     * @return Map结构试题集合，key对应题型：1-选择题，2-填空题，3-判断题
     */
    @GetMapping("/paper/{paperId}")
    public Map<Integer, List<?>> findById(@PathVariable("paperId") Integer paperId) {
        // 通过各题型服务获取对应题目列表
        List<MultiQuestion> multiQuestionRes = multiQuestionService.findByIdAndType(paperId);
        List<FillQuestion> fillQuestionsRes = fillQuestionService.findByIdAndType(paperId);
        List<JudgeQuestion> judgeQuestionRes = judgeQuestionService.findByIdAndType(paperId);

        // 构建题型分类的题目集合
        Map<Integer, List<?>> map = new HashMap<>();
        map.put(1,multiQuestionRes);
        map.put(2,fillQuestionsRes);
        map.put(3,judgeQuestionRes);
        return  map;
    }

    /**
     * 添加新试卷管理信息
     * @param paperManage 包含试卷详细信息的请求体对象
     * @return 操作结果响应（成功200+成功消息，失败400+失败消息）
     */
    @PostMapping("/paperManage")
    public ApiResult add(@RequestBody PaperManage paperManage) {
        int res = paperService.add(paperManage);
        if (res != 0) {
            return ApiResultHandler.buildApiResult(200,"添加成功",res);
        }
        return ApiResultHandler.buildApiResult(400,"添加失败",res);
    }

    /**
     * 删除试卷中的指定试题
     * @param paperId 试卷唯一标识符（字符串格式）
     * @param type 题目类型标识：1-选择题，2-填空题，3-判断题
     * @param questionId 要删除的题目唯一标识符
     * @return 操作结果响应（成功200+成功消息）
     */
    @GetMapping("/paper/delete/{paperId}/{type}/{questionId}")
    public ApiResult delete(
            @PathVariable("paperId") String paperId,
            @PathVariable("type") String type,
            @PathVariable("questionId") String questionId
    ) {
        paperService.delete(paperId, type, questionId);
        return ApiResultHandler.buildApiResult(200,"删除成功", null);
    }
}
